package com.lyc.platform.message.core.header;

import com.lyc.platform.message.core.consts.HeadersConst;

import java.util.concurrent.TimeUnit;

/**
 * 消息头
 *
 * @author liangyucheng
 */
public interface Headers {

    /**
     * 是否为异步消息
     */
    HeaderKey<Boolean> ASYNC = HeaderKey.of(HeadersConst.ASYNC, false);

    /**
     * 保持在线,与{@link com.lyc.platform.message.core.message.device.DeviceOnlineMessage}配合使用.
     */
    HeaderKey<Boolean> KEEP_ONLINE = HeaderKey.of(HeadersConst.KEEP_ONLINE, true, Boolean.class);

    /**
     * 保持在线超时时间,超过指定时间未收到消息则认为离线
     */
    HeaderKey<Integer> KEEP_ONLINE_TIMEOUT_SECONDS = HeaderKey.of(HeadersConst.KEEP_ONLINE_TIMEOUT_SECONDS, 600, Integer.class);

    /**
     * 指定发送消息的超时时间
     */
    HeaderKey<Long> TIMEOUT = HeaderKey.of(HeadersConst.TIMEOUT, TimeUnit.SECONDS.toMillis(10), Long.class);


    //******** 分片消息,一个请求,设备将结果分片返回,通常用于处理大消息. **********

    /**
     * 分片消息ID(为平台下发消息时的消息ID)
     */
    HeaderKey<String> FRAGMENT_BODY_MESSAGE_ID = HeaderKey.of(HeadersConst.FRAG_MSG_ID, null, String.class);
    /**
     * 分片数量
     */
    HeaderKey<Integer> FRAGMENT_NUMBER = HeaderKey.of(HeadersConst.FRAG_NUM, 0, Integer.class);

    /**
     * 是否为最后一个分配,如果分片数量不确定则使用这个来表示分片结束了.
     */
    HeaderKey<Boolean> FRAGMENT_LAST = HeaderKey.of(HeadersConst.FRAG_LAST, false, Boolean.class);

    /**
     * 当前分片
     */
    HeaderKey<Integer> FRAGMENT_PART = HeaderKey.of(HeadersConst.FRAG_PART, 0, Integer.class);


}
